Блог им. 3Qu |Как я потерял веру в человечество.

    • 22 декабря 2021, 15:59
    • |
    • 3Qu
  • Еще
Было это в году 11-м или 12-м. В эти годы Финам зачастил приглашать меня на свои семинары. Ходил только на 3 из них. Первый семинар в подвале Финама (они в основном там все проходили) был оч неплох. О чем конкретно, уже не помню, но в перерыве давали халявный кофе с булками и баунти-сникерсами. Такая теплая дружественная обстановка. В перерыве прибился ко мне какой-то мужичек, который что-то говорил. Задним числом, по косвенным признакам, подозреваю, что это был наш Хамстер.
Второй семинар был о том, как зарабатывать на рынке. Лектор телосложением напоминал маршала Жукова, но ничего конкретного сказано не было. На любой вопрос ответ был стандартный — это вы узнаете на курсе, который вы оплатите. Могли бы, хоть кофием угостить.
Третий семинар — это был монолог нашего АГ. До этого я его уже неск раз видел-слышал на семинарах РТС и конференциях по алготорговле. АГ у меня прочно ассоциировался с длинными хвостами.
На этот раз АГ рассказывал о своей торговой системе, не помню, приглашал ли он делать взносы и стать инвесторами.) Наверное сейчас, после многих лет, что-нибудь перевру, но основная суть его системы: проводим линию регрессии, определяем стандартное отклонение, задаем порог отклонения котировок от линии регрессии, и при превышении этого порога покупаем или продаем активы. Это называется — пороговое устройство. В теории сигналов — это самая простейшая и самая примитивная обработка, которую можно придумать.

( Читать дальше )

Блог им. 3Qu |Хотите попрогнозировать рыночные котировки? Нет проблем - вот код.

    • 14 сентября 2021, 22:46
    • |
    • 3Qu
  • Еще
Итак, код обучения и прогнозирования нейросетью рыночных котировок на 5 минут.
import sqlite3 as sql
from scipy.stats import logistic
import math
import numpy as np
import numpy.random as rnd
import matplotlib.pyplot as plt
from sklearn.neural_network import MLPRegressor

sdata =[]
sql1= "select ticker, date, open, high, low, close, vol \
    from Hist_1m where ticker_id=1 order by Date;"
con=sql.connect('C:/Users/ubase/Documents/StockDB/StockDB21.sqlite')
cur=con.cursor()
cur.execute(sql1)
sdata=cur.fetchall()
con.commit()
con.close()

Ldata = len(sdata)
N = 8000 # Количество сделок
ld = 5 #Продолжительность сделки
NNinterval = 20 # Количество входов NN

# Генерация случайных чисел
rng = rnd.default_rng()
rm=rng.integers(0, Ldata, N )

class Candle:
    tr = 0
    dt = 1
    o = 2
    h = 3
    l = 4
    c = 5
    v = 6
    
cl = Candle
DataC =[sdata[i][cl.c] for i in range(0,Ldata)]

# sigmoid линейность до 0.5
def sigmoidnorm(x, alfa = 0.9, xmin = -1.3, xmax = 1.3):
    return (xmax - xmin)*((1 / (1 + math.exp(-x*2.0*alfa))) - 1.0) + xmax

x = [0.002 * i - 3 for i in range(0,3000)]
y = [sigmoidnorm(x[i]) for i in range(len(x))]


plt.plot(x,y)
plt.grid()
plt.show()

# формируем сделки.
def DealsGenL(rm,ld):
   #Lm = len(rm)
   ix = []
   x = []
   pr = []
   
   for i in range(0,N):
        if rm[i] + ld < Ldata and rm[i] - NNinterval - 1 > 0:
            delta = (sdata[rm[i]+ld][cl.c] - sdata[rm[i]][cl.c])/sdata[rm[i]+ld][cl.c]*100
            x0 = [sigmoidnorm((sdata[rm[i] - j][cl.c] - sdata[rm[i]][cl.c])/sdata[rm[i]][cl.c]*100) \
                 for j in range(0, NNinterval)]
            ix.append(rm[i])
            x.append(x0)
            pr.append(delta)
   return ix, x, pr


Ix, X, Pr = DealsGenL(rm,ld)



Ib = 0
Ie = 100

plt.plot(X)
plt.legend()
plt.grid()
plt.show()


plt.plot(Pr, label = 'Prof')
plt.legend()
plt.grid()
plt.show()


regr = MLPRegressor(hidden_layer_sizes = [30,20,15,10,5], \
                    max_iter=500, activation = 'tanh')

regr.fit(X, Pr)
Out = regr.predict(X)

plt.plot(Pr, Out, '.')
plt.grid()
plt.show()
И вот результат прогнозирования:

( Читать дальше )

Блог им. 3Qu |Ох, уж, эти выбросы.

    • 04 сентября 2021, 00:24
    • |
    • 3Qu
  • Еще
При анализе рыночных данных оч мешают выбросы. Гэпы всякие, которые зашкаливают за все нормальные диапазоны, и в течение длительного времени забивают все индикаторы и весь анализ. Вот такие, например:
Ох, уж, эти выбросы.
Здесь бы до 1.5 -1.7 все ограничить, и нормально бы было.
Для этого обычно применяются всяческие ограничители, типа сигмоидов и им подобных:
Ох, уж, эти выбросы.

( Читать дальше )

Блог им. 3Qu |Проектирование ТС. 4. Машинное обучение.

    • 31 августа 2021, 15:40
    • |
    • 3Qu
  • Еще

Ещё с самого начала, в первой части, писал, что проект является экспериментальным, что из него получится я не знаю.Получится — хорошо, не получится — останутся наработки, которые могут пригодиться в дальнейшем.Тем не менее, обещал освещать ход проекта.
На сегодняшний день удалось получить на тестах некоторую незначительную и неустойчивую прибыль. Эти копейки не произведут впечатления на читателя — такое вы и сами получали неоднократно. Даж позориться не хочется.)
Но, что это дало? Это позволило алгоритмически более-менее разграничить области возможных лонгов и шортов.
Дальше есть следующие возможности:
а. Накручивать на ТС различные индикаторы и долго и нудно подбирать их параметры и условия входа в сделку и соответствующую логику.
в. Попробовать использовать для построения ТС методы машинного обучения (МО. Тем более, какие-то наработки в этой области у меня уже есть.
«И так как с детства его влекло к технике, то он всею душою отдался пункту «в» (тайное похищение чужого имущества, совершенное с применением технических средств или неоднократно».© Пункт «в» мне тоже более интересен, однако я совсем не исключаю и параллельного применения элементов из пункта «а».
Для тех, кто не в теме, немного подробней.
Если мы возьмём рыночные данные, каким-то образом их идеально подготовим, попробуем обучить какое нибудь МО (нейросеть (НС), скажем), то мы, скорее всего, сразу получим великолепные результаты. Единственным недостатком этих результатов будет то, что прибыль мы сможем получить только на той истории, на которой мы обучали МО. На реале и даже на другом отрезке истории такая ТС работать скорее всего не будет.
Рыночные зависимости очень неявные, встречаются в ценовом ряду нечасто и выделить их на общем фоне удачных и неудачных сделок не представляется возможным. В результате МО при обучении находит некоторые зависимости или псевдозависимости имеющиеся только в обучающей последовательности, нигде более не встречающиеся и обучается им. Т.е., псевдозависимости оказываются более явными, чем то что мы пытаемся найти.
Как с этим планируется бороться, это, возможно, обсудим уже в следующий раз.


Блог им. 3Qu |Проектирование ТС. 3. Базовые принципы.

    • 28 августа 2021, 16:55
    • |
    • 3Qu
  • Еще
Собственно, все стратегии основаны на принципе: покупай дешево — продавай дорого. Вопрос только в определении понятий — дорого/дешево.
Основной принцип на графике:
Проектирование ТС. 3. Базовые принципы.
Это фьючерс Сбера, 1 м график, по х — минуты. Дешево внизу, дорого вверху. Средняя прибыль ~40 п за сделку.
Я не боюсь, что кто-то что-то украдет, в смысле идей, да, они, собственно, и без меня очевидны. Один из наших коллег на СЛ уже «украл» — работает с этим уже три или 4 года — результат околонулевой. Ну, вы наверное знаете товарисча.)
Вот с этим я сейчас и работаю. Система совершенно другая — старая почти изжила себя — на графике все можно увидеть. Раньше ходы цены были несколько другими.  Сейчас требуются другие подходы к снаряду. Сеточники — не хочу, не нравится мне это, хотя bohemian rhapsody...
Вот, пока, чего не пойму, так это стратегию Мальчика BuyBuy. Может, вообще бы все переделал, если бы понял.))
А вообще, не скрою, я сюда, на СЛ, за идеями пришел. Варясь в собственном соку новые мысли не появятся.



Блог им. 3Qu |Проектирование ТС. 2 Тестер стратегий.

    • 27 августа 2021, 22:25
    • |
    • 3Qu
  • Еще
Люди достаточно часто пишут — я бы конечно моделировал, но где взять тестер стратегии? Не на чем тестировать.
Ну, это самое простое, что может быть, я тестер пишу каждый раз заново — лень искать, быстрее написать заново. Да, и функциональность, возможно, нужна какая-то другая.
Смотрим код тестера стратегии и его вызов:
def TradeSystem(ibegin):
    ln = len(sdata)
    i = ibegin
    indata =[]
    dealdata =[]
    while i < ln:
        ls = DealIn(i)
        if ls != 0:
            j = DealControl(i, ls)
            i = j
        i += 1 
    return dealdata, indata
    
DealsData, InData = TradeSystem(100)  #вызов тестера стратегий
Рабочий код, между прочим.)
ibegin — это номер свечи на истории с которой начнет работу тестер.
sdata — история в формате [datetime, o, h, l, c, v]
indata — все параметры открытия сделок для последующего анализа.
dealdata — все необходимые для последующего анализа данные о всех сделках на истории
Дальше идет цикл while() последовательно перебирающий свечи на истории, которые анализируются функцией DealIn(i) (собственно, это и есть ваша стратегия, определяющая момент открытия сделки Лонг или шорт — ls). DealIn() при обнаружении сделки также передает данные для анализа в indata

( Читать дальше )

Блог им. 3Qu |Проектирование ТС. 1

    • 15 августа 2021, 18:09
    • |
    • 3Qu
  • Еще
Обещал в Процесс рождения интрадей Грааля пошагово освещать процесс проектирования торговой системы — освещаю).
Итак, первым делом скачал с Финам 1м котировки нескольких фьючерсов за 3 последних месяца перед экспирацией и поместил их в БД SQLite — так проще работать. Код экспорта из CSV в SQLite приводил ранее, см. раздел Python моего блога.
Вот эти:

1 GAZR-6.21 GZM1
2 GAZR-9.21 GZU1
3 SBRF-6.21 SRM1
4 SBRF-9.21 SRU1
5 Si-6.21 SiM1
6 Si-9.21 SiU1
С фьючем РТС работать и отрабатывать технологии сложнее, если и нужен будет, то оч нескоро.
У меня заготовлено несколько новых индикаторов для этой ТС. Конечно я на что-то рассчитывал при их проектировании, но все это умозрительно, и о реальных свойствах индикаторов я, ровным счетом, ничего не знаю. Для начала хотелось бы выяснить их возможности.
Для этого на множестве 1м истории (~66000 свечей) генерируем ~6600 равномерно распределенных по интервалу истории случайных сделок продолжительностью 5 минут ( потом будет и 10 и 15 минут), пока только Лонг (потом и Шорт будет, рассматривается отдельно) и находим прибыль в каждой из этих сделок.
Выглядеть это будет вот так:
Проектирование ТС. 1 



( Читать дальше )

Блог им. 3Qu |Так ли нужны ли сложные модели рынка? (с) Eugene Logunov

    • 02 августа 2021, 23:57
    • |
    • 3Qu
  • Еще
Так как только избранные могут читать этот топик, а тема интересная, придется прокомментировать заголовок.
С одной стороны, простых моделей не существует в природе, иначе при современных алгоритмах обработки информации они находились бы каждым желающим на раз-два.
Изначально, анализ временных рядов и выявление в нем каких-либо «закономерностей» является оч непростой задачей — на эту тему тома написаны и оч известными в науке людьми. С другой стороны, излишнее усложнение моделей стохастических процессов ведет к неустойчивости таких моделей.
Получается, что с одной стороны, простых моделей не существует в природе, а, с другой стороны, сложные модели существенно неустойчивы, вплоть до полной неработоспособности.
Нужно выбирать где-то посередине, но здесь нам предстоит достаточно сложная работа по выбору системы, т.к. из предыдущего следует, что без дополнительных гипотез ничего явного нам обнаружить не удастся. А гипотезы могут и не оправдаться.)

Блог им. 3Qu |Windows 10, Python, Anaconda, Miniconda (топик для питоноводов).

    • 28 июня 2021, 23:13
    • |
    • 3Qu
  • Еще
Доконал я, таки, свою Windows 10, стала еле ползать. Вначале восстановил штатной системой восстановления — не понравилось. Тогда сделал чистую установку. Вроде нормально, полетела. Поставил VS 2019, и очередь дошла до Python — что ставить?
Уже несколько лет использую Python для всех задач анализа данных и моделирования торговых систем. До того использовал разное — Excel, MathLab, SciLab, R. Python, имхо, оказался наиболее удобным и быстрым инструментом для решения всех околорыночных задач.
В свое время долго выбирал среду под Python, и, в конце концов остановился на Anaconda. Это самое оно для начинающих — все сразу сконфигурировано и готово к употреблению, уже сразу в базе ~700 пакетов, и не надо заморачиваться с их установкой. Кроме того, уже готовы к употреблению несколько сред разработки, я пользуюсь только одной — Spyder — не то, чтобы другие хуже, просто потребности не возникало.
В общем, для тех, кто только начинает работать с Python или не хочет заморачиваться с пакетами и средами, Anaconda — самое оно.
Однако, есть и недостатки. Очень большой объем на диске, долго ставится. Все 700 пакетов вам никогда не понадобятся, и по любому, позднее какие-то пакеты вам все равно придется устанавливать самостоятельно. Множество сред разработки тоже никогда не понадобятся, однако, чтобы получить общее представление о том, что есть под Python, для начальных этапов не вредно.

( Читать дальше )

Блог им. 3Qu |Связь Lua -> ваша программа. RAM Disk.

    • 11 мая 2021, 21:33
    • |
    • 3Qu
  • Еще
Я, вроде, уже писал подобный пост. Давно. Но, новое — хорошо забытое старое.
Очень многие неплохо владеют основами программирования, но написать DLL, связь через TCP или что-то другое для экспорта-импорта в Lua — это достаточно сложная процедура, и требует дополнительных знаний и много времени. Однако, если такую связь как-то по простому реализовать, то решились бы многие проблемы обмена данными с C#, Python и другими средами, и не надо вникать во всяческие C-API и прочие премудрости.
Однако, есть достаточно простой и доступный способ — обмен данными через файлы. Например, так:
1. программа Lua пишет строку (строки) данных в формате CSV в файл data.csv,
2. программа Lua создает пустой файл flag.ddd,
3. ваша программа проверяет наличие файла flag.ddd, что означает, что данные готовы к чтению,
4. при наличии файла flag.ddd программа читает данные файла data.csv и удаляет файл flag.ddd,
5. программа Lua проверяет наличие файла flag.ddd, и если этот файл отсутствует пишет строку (строки) данных в файл data.csv (см. п.1)
При обратном обмене происходит все тоже самое, только имена файлов другие.

( Читать дальше )
  • обсудить на форуме:
  • Quik Lua

....все тэги
UPDONW
Новый дизайн